今天要介紹的是onTouchEvent,是用來監聽螢幕的動作像是拖曳和點擊,而我們的使用方法是要複寫onTouchEvent,
接者就先來看一下觸發動作的語法!!最後再來個小範例。
最下面兩個抓取的時間,是一個奇怪的數值,找了很久都不知道是甚麼,所以這邊我用System.currentTimeMillis()來抓取時間搓,之後再用Date和Calendar來轉換和拿取時間。
Date.setTime() :用來把時間搓轉換為,年日月格式。
Calendar.get(Calendar.XXX); :XXX有很多種,可以拿取年的是(YEAR)月的是(MONTH)之類的。
event.getX() :抓取當前x的座標。
event.getY() :抓取當前y的座標。
event.getAction() :取得上面那幾個動作類型。
event.getDownTime() :按下的開始時間
event.getEventTime() :事件結束的時間
因為模擬器不會震動,所以還是要用連接Android機比較好。
public class MainActivity extends AppCompatActivity{
private Vibrator vibrator;
private TextView tvX;
private TextView tvY;
private TextView tvDate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//設定震動
vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
tvX=(TextView) findViewById(R.id.x);
tvY=(TextView) findViewById(R.id.y);
tvDate=(TextView) findViewById(R.id.textView);
}
public boolean onTouchEvent(MotionEvent event) {
// 判斷觸控的動作
switch (event.getAction()) {
// 按下
case MotionEvent.ACTION_DOWN:
//建立calendar & date
Calendar calendar = Calendar.getInstance();
Date date = new Date();
//拿取時間搓,再轉換為日期時間
date.setTime(System.currentTimeMillis());
//calendar的時間設定為date
calendar.setTime(date);
//放入tvDate
tvDate.setText(" 西元 " +calendar.get(Calendar.YEAR) +
" 年 "+(calendar.get(Calendar.MONTH)+1) +
" 月 "+calendar.get(Calendar.DAY_OF_MONTH) + " 日");
return true;
// 拖曳
case MotionEvent.ACTION_MOVE:
//拖曳時會不斷拿取 X軸 和 Y軸
tvX.setText(String.valueOf(event.getX()));
tvY.setText(String.valueOf(event.getY()));
return true;
// 放開
case MotionEvent.ACTION_UP:
//手機震動1秒
vibrator.vibrate(1000);
return true;
}
return super.onTouchEvent(event);
}